package com.wqy.netty.server;

import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.*;
import org.jboss.netty.handler.codec.frame.FrameDecoder;

/**
 * @Auther: WangQingyang
 * @Date: 2020/3/30 11:42
 * @Description:  解决粘包问题 运行这个方法后，都会在进行判断
 */
public class MyDecoder extends FrameDecoder {
    @Override
    protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {
        if (buffer.readableBytes()>4){//大于基本长度

            //标记
            buffer.markReaderIndex();
            //长度
            int length = buffer.readInt();
            //如果后面的长度没有达到length
            if (buffer.readableBytes() < length){
                buffer.resetReaderIndex();
                return null;
            }
            byte[] bytes = new byte[length];
            buffer.readBytes(bytes);

            //为什么return string 就向下传递
            return  new String(bytes);
            //?？？？如果buff数据没有取完
        }
        //继续接受？？？？为什么return null 就是继续读取
        return null;
    }
}
